#include <iostream>
#include <mprpcapplication.h>
#include <user.pb.h>

int main(int argc, char* argv[]) {
    // 想用mprpc服务需要先调用框架的初始化函数
    MprpcApplication::Init(argc, argv);


    // 调用远程rpc节点发布的Login
    fixbug::UserServiceRpc_Stub stub(new MprpcChannel());
    // rpc方法请求
    fixbug::LoginRequest request;
    request.set_name("zhang san");
    request.set_pwd("123456");
    // rpc方法响应结果
    fixbug::LoginResponse response;
    // rpc调用状态
    MprpcController controller;
    // rpc调用具体方法，同步
    stub.Login(&controller, &request, &response, nullptr);   // RpcChannel->CallMethod()     基类通过多态来做rpc请求调用（序列化和网络发送）

    if(controller.Failed()) {
        std::cout << controller.ErrorText() << std::endl;
    }
    else {
        // 一次rpc调用完成，解析response
        if (0 == response.result().errcode()) {
            std::cout << "rpc login response success:" << response.success() << std::endl;
        }
        else {
            std::cout << "rpc login response error:" << response.result().errmsg() << std::endl;
        }
    }
    

    // 调用远程rpc节点发布的Register
    // rpc方法请求
    controller.Reset();
    fixbug::RegisterRequest req;
    req.set_id(2000);
    req.set_name("mprpc");
    req.set_pwd("666666");
    // rpc方法响应结果
    fixbug::RegisterResponse rsp;
    // rpc调用具体方法，同步 
    stub.Register(controller, &req, &rsp, nullptr);   // RpcChannel->CallMethod()     基类通过多态来做rpc请求调用（序列化和网络发送）

    if(controller.Failed()) {
        std::cout << controller.ErrorText() << std::endl;
    }
    else {
        // 一次rpc调用完成，解析response
        if (0 == rsp.result().errcode()) {
            std::cout << "rpc login response success:" << rsp.success() << std::endl;
        }
        else {
            std::cout << "rpc login response error:" << rsp.result().errmsg() << std::endl;
        }
    }
    
    return 0;
}